package com.styletransfer.controller;

import com.styletransfer.model.*;
import com.styletransfer.service.CommentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 评论控制器
 *
 * 提供评论相关的API接口，包括添加评论、删除评论、查询评论等
 */
@RestController
@RequestMapping("/comment")
public class CommentController {

    @Autowired
    private CommentService commentService;

    /**
     * 添加评论
     *
     * @param comment 评论信息
     * @return API响应
     */
    @PostMapping("/add")
    public ApiResponse<Comment> addComment(
            @RequestBody Comment comment) {
        // 设置评论类型
        comment.setType(comment.getType());
        return commentService.addComment(comment);
    }

    /**
     * 删除评论
     *
     * @param id 评论ID
     * @return API响应
     */
    @DeleteMapping("/{id}")
    public ApiResponse<Void> deleteComment(@PathVariable Long id) {
        return commentService.deleteComment(id);
    }

    /**
     * 根据目标ID和类型查询评论列表
     *
     * @param targetId 目标ID（作品ID或专辑ID）
     * @param type 评论类型，可选值：work（作品评论）、album（专辑评论）
     * @return API响应
     */
    @GetMapping("/{targetId}")
    public ApiResponse<List<Comment>> getCommentsByTargetId(
            @PathVariable Long targetId,
            @RequestParam(defaultValue = "work") String type) {
        if ("album".equals(type)) {
            // 如果是专辑评论，调用专辑评论查询方法
            return commentService.findByAlbumId(targetId);
        } else {
            // 默认查询作品评论
            return commentService.findByWorkId(targetId);
        }
    }

    /**
     * 根据目标ID和类型分页查询评论列表
     *
     * @param targetId 目标ID（作品ID或专辑ID）
     * @param type 评论类型，可选值：work（作品评论）、album（专辑评论）
     * @param page 页码
     * @param size 每页大小
     * @return 分页响应
     */
    @GetMapping("/list/{targetId}")
    public ApiResponse<PageResponse<Comment>> getCommentsByTargetIdWithPage(
            @PathVariable Long targetId,
            @RequestParam(defaultValue = "work") String type,
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer size) {
        PageRequest pageRequest = new PageRequest(page, size);

        if ("album".equals(type)) {
            // 如果是专辑评论，调用专辑评论分页查询方法
            PageResponse<Comment> byAlbumIdWithPage = commentService.findByAlbumIdWithPage(targetId, pageRequest);
            return ApiResponse.success(byAlbumIdWithPage);
        } else {
            // 默认查询作品评论
            PageResponse<Comment> byWorkIdWithPage = commentService.findByWorkIdWithPage(targetId, pageRequest);
            return ApiResponse.success(byWorkIdWithPage);
        }
    }

    /**
     * 根据用户ID查询评论列表
     *
     * @param userId 用户ID
     * @return API响应
     */
    @GetMapping("/user/{userId}")
    public ApiResponse<List<Comment>> getCommentsByUserId(@PathVariable Long userId) {
        return commentService.findByUserId(userId);
    }
}
